#include <REGX52.H>
#include "Delay.h"

/*********************************************************************
	方法：初始化串口功能。4800bps@12.000MHz
	参数：
	返回值：无
*/
void UART_Init()
{
	SCON=0x50;		//串口方式1，允许接收
	PCON|=0x80;		//波特率加倍
	
	TMOD&=0x0F;		//定时器1方式2
	TMOD|=0x20;
	
	TL1=0xF3;	//定时器1方式2设置初值
	TH1=0xF3;
	
	ET1=0;		//禁止定时器1中断
	EA=1;
	ES=1;
	TR1=1;		//启动定时器1
}

/**************************波特率的计算方式****************************
TH1、TL1赋值是0xF3,		256-F3=13,		每隔13us就溢出一次
溢出率=1s/13us=0.0769230769230769MHz;
波特率=0.0769230769230769MHz/16=0.0048076923076923MHz=4807.6923076923Hz
误差=7.69/4800=0.0016025=0.16%
*/

/*********************************************************************
	方法：发送一个字节，同步方式
	参数：数据
	返回值：无
*/
void UART_SendByte(unsigned char byte)
{
	SBUF=byte;
	while(TI==0);
	TI=0;
}

/*********************************************************************
	方法：串口发送一个数组
	参数：
	返回值：无
*/
void UART_SendArray(unsigned char *Byte)
{
	unsigned int len = sizeof(Byte) / sizeof(Byte[0]); // 计算数组长度
	unsigned int i;
	P2=len;
	for(i=0;i<len;i++)
	{
		UART_SendByte(Byte[i]);
		Delay(1);
	}
}

/*********************************************************************
	方法：串口中断函数
	参数：
	返回值：无
*/
void UART_Receive() interrupt 4
{
	if(RI)	//接收
	{
		unsigned char byte = SBUF;
		P2=byte;
		UART_SendByte(SBUF);	//收到什么返回什么
		
		RI=0;
	}
}

/*********************************************************************
	方法：串口测试程序
	参数：
	返回值：无
*/
void UART_Main()
{
//	unsigned char arr[] = {1, 2, 3, 4, 5}; // 示例数组
//    unsigned int length = sizeof(arr) / sizeof(arr[0]); // 计算数组长度

	unsigned char arr[] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36,0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
	UART_Init();
//	UART_SendByte(0x66);
	UART_SendArray(arr);
	while(1)
	{
//	unsigned char Second;
//		UART_SendByte(Second++);	//每隔一秒发送递增数据
//		Delay(1000);
	}
}